/* eslint-disable no-undef */
import { mapGetters } from 'vuex'

export default {
  name: 'D3View',
  data () {
    return {
      showType: true,
      data: [],
      data1: [],
      layout: {},
      layout1: {},
      bgcol: '#d7f9ff',
      basiccol: '#0243FD',
      corecol: '#FF1A05',
      ifRotate: false,
      currentAngle: 0,
      rotationSpeed: 20,
      animateFrame: null
    }
  },
  computed: mapGetters({
    stdIndex: 'getStdIndex'
  }),
  mounted () {
    this.showData()
  },
  methods: {
    showData () {
      // 数据初始化
      // this.stdIndex={learn:2,experience:1.2,health:3.89,burnout:4.17,anxious:3.75,pressure:3.75,ability:3.54,ba:4.17,pa:3.75,ea:5,sa:1.25,pb:4.17,influence:0.83,oi:0,pi:1,si:1.5}
      // 显示方式
      this.showType = true
      // 定义比例尺大小
      // 定义背景色 基础色 核心色
      const a = 5 * Math.sqrt(3) / 6
      // 定义三棱锥的四个顶点
      const p10 = [0, 0, 2 * a * Math.sqrt(2)] // 顶点
      const p1 = [-Math.sqrt(3) * a, -a, 0]// 左点
      const p2 = [Math.sqrt(3) * a, -a, 0]// 右点
      const p3 = [0, 2 * a, 0]// 后点

      // 生成底面点
      const p0 = [0, 0, -2 * a * Math.sqrt(2)] // 底面点
      // 获取 学习 经验 心理健康 点
      const p4 = this.getSprPoint(p1, p0, this.stdIndex.learn)
      const p5 = this.getSprPoint(p2, p0, this.stdIndex.experience)
      const p6 = this.getSprPoint(p3, p0, this.stdIndex.health)
      // 获取 角色能力 影响 前瞻能力 点
      const p7 = this.getSprPoint(p1, p10, this.stdIndex.ability)
      const p8 = this.getSprPoint(p2, p10, this.stdIndex.influence)
      const p9 = this.getSprPoint(p3, p10, this.stdIndex.pb)
      // 生成指标标度线数据
      const learnLine = this.get_LineM([p1, p4])
      const experienceLine = this.get_LineM([p2, p5])
      const healthLine = this.get_LineM([p3, p6])
      const abilityLine = this.get_LineM([p1, p7])
      const infuenceLine = this.get_LineM([p2, p8])
      const pbLine = this.get_LineM([p3, p9])
      // 生成中点标记
      var textLearn = this.create_Text(p1, p4, '学习:' + this.stdIndex.learn)
      var textExperience = this.create_Text(p2, p5, '经验:' + this.stdIndex.experience)
      var textHealth = this.create_Text(p3, p6, '心理健康:' + this.stdIndex.health)
      var textAbility = this.create_Text(p1, p7, '角色能力:' + this.stdIndex.ability)
      var textInfuence = this.create_Text(p2, p8, '影响力:' + this.stdIndex.influence)
      var textPb = this.create_Text(p3, p9, '前瞻能力:' + this.stdIndex.pb)
      // 生成包围面
      const lsp = this.get_Plane([p1, p4, p6, p3, p1], this.basiccol)
      const rsp = this.get_Plane([p2, p5, p6, p3, p2], this.basiccol)
      const fsp = this.get_Plane([p1, p4, p5, p2, p1], this.basiccol)
      const usp = this.get_Plane([p4, p5, p6, p4], this.basiccol)
      // 底面
      var dsp = this.get_Plane([p1, p2, p3, p1], this.corecol)
      // 生成包围面
      const lspd = this.get_Plane([p1, p7, p9, p3, p1], this.corecol)
      const rspd = this.get_Plane([p2, p8, p9, p3, p2], this.corecol)
      const fspd = this.get_Plane([p1, p7, p8, p2, p1], this.corecol)
      const uspd = this.get_Plane([p7, p8, p9, p7], this.corecol)
      // 计算体积
      // const volume1 = Math.floor(Math.sqrt(2) / 12 * (125 - (5 - this.stdIndex.learn) * (5 - this.stdIndex.experience) * (5 - this.stdIndex.health)) * 100) / 100
      // const volume2 = Math.floor(Math.sqrt(2) / 12 * (125 - (5 - this.stdIndex.ability) * (5 - this.stdIndex.influence) * (5 - this.stdIndex.pb)) * 100) / 100
      // const V14 = [v4[0] - v1[0], v4[1] - v1[1], v4[2] - v1[2]];
      // const V_n = this.get_zb(v1, V14, 3)
      // const V_n1 = this.get_zb(v1, v4, 3)
      // const V_n2 = this.get_zb(v2, v4, 2.5)
      // const V_n3 = this.get_zb(v3, v4, 1)
      // // 创建三棱锥的6条棱
      const edge1 = this.get_Line(p0, p1)
      const edge2 = this.get_Line(p0, p2)
      const edge3 = this.get_Line(p1, p2)
      const edge4 = this.get_Line(p0, p3)
      const edge5 = this.get_Line(p1, p3)
      const edge6 = this.get_Line(p2, p3)
      // // 创建三棱锥的6条棱
      const edg1 = this.get_Line(p10, p1)
      const edg2 = this.get_Line(p10, p2)
      const edg3 = this.get_Line(p10, p3)

      // const data = [learnLine, experienceLine, healthLine, lsp, rsp, fsp, usp];
      this.data = [learnLine, experienceLine, healthLine, abilityLine, infuenceLine, pbLine,
        lsp, rsp, fsp, usp, lspd, rspd, fspd, uspd,
        edge1, edge2, edge3, edge4, edge5, edge6,
        edg1, edg2, edg3,
        textAbility, textExperience, textHealth, textInfuence, textLearn, textPb
      ]
      // const data = [m1, m2, m3, m4]
      this.layout = {
        paper_bgcolor: this.bgcol,
        autosize: true,
        width: document.body.clientWidth * 0.9,
        height: '60vh',
        showlegend: false,
        margin: {
          l: 10, // 左边界大小
          r: 10, // 右边界大小
          t: 10, // 顶部边界大小
          b: 10 // 底部边界大小
        },
        scene: {
          xaxis: { visible: false, showgrid: false, showline: false, zeroline: false, showticklabels: false },
          yaxis: { visible: false, showgrid: false, showline: false, zeroline: false, showticklabels: false },
          zaxis: { visible: false, showgrid: false, showline: false, zeroline: false, showticklabels: false },
          camera: {
            aspectmode: 'auto',
            center: {x: 0, y: 0, z: 0},
            eye: {x: 1.5, y: 1.5, z: 1}}
        },
        title: {
          text: '按住左键拖动可实现旋转效果，按住右键拖动可实现平移效果,滚轮可实现放缩效果', // 标题文本
          x: 0.5,
          y: 0.95 // 标题在垂直方向上的位置，范围为0到1之间，0表示顶部，1表示底部
        }
      }
      this.layout1 = {
        paper_bgcolor: this.bgcol,
        autosize: true,
        width: document.body.clientWidth * 0.9,
        height: '60vh',
        showlegend: false,
        margin: {
          l: 10, // 左边界大小
          r: 10, // 右边界大小
          t: 10, // 顶部边界大小
          b: 10 // 底部边界大小
        },
        scene: {
          xaxis: { visible: false, showgrid: false, showline: false, zeroline: false, showticklabels: false },
          yaxis: { visible: false, showgrid: false, showline: false, zeroline: false, showticklabels: false },
          zaxis: { visible: false, showgrid: false, showline: false, zeroline: false, showticklabels: false },
          camera: {
            aspectmode: 'auto'
            // ,
            // center: {x: 5, y: 0, z: 0},
            // eye: {x: 3, y: 3, z: 2}
          }
        },
        title: {
          text: '按住左键拖动可实现旋转效果，按住右键拖动可实现平移效果,滚轮可实现放缩效果', // 标题文本
          x: 0.5,
          y: 0.95 // 标题在垂直方向上的位置，范围为0到1之间，0表示顶部，1表示底部
        }
      }
      // Plotly.newPlot('plotlyChart', data, layout)
      // var i, name
      // var frames = []
      // var nFrames = 20
      // var framedata = []
      // for (i = 0; i < nFrames - 1; i++) {
      //   var height = 0.01 + Math.max(p4[2], p5[2], p6[2]) * i / (nFrames - 1)

      //   // Choose a name:
      //   name = 'frame' + i

      //   // Create the frame:
      //   framedata.push(this.get_LineM(this.getCrossPointList(p1, p2, p3, p4, p5, p6, height), 'mesh3d', 'toself', 'green'))
      //   frames.push({
      //     name: name,
      //     data: [this.get_LineM(this.getCrossPointList(p1, p2, p3, p4, p5, p6, height), 'mesh3d', 'toself', 'green')]
      //   })
      // }
      Plotly.newPlot('plotlyChart1', this.data, this.layout)
      // data=data.concat(framedata)
      // .concat(this.get_LineM)
      // data = [this.get_LineM([p1, p2, p3])]
      // // console.log(data)
      // async function initializeChart (plotlyChart, data, layout, fun) {
      //   await Plotly.newPlot(plotlyChart, data, layout)
      //   fun(plotlyChart)
      // }
      // initializeChart('plotlyChart1', this.data, this.layout, this.rotateChart)
      // this.layout.scene.rotation.z += 5 // 调整旋转角度

      /// /并排显示的data1
      //

      // 定义三棱锥的四个顶点
      const q0 = [10, 0, 2 * a * Math.sqrt(2)] // 顶点
      const q1 = [10 - Math.sqrt(3) * a, -a, 0]// 左点
      const q2 = [10 + Math.sqrt(3) * a, -a, 0]// 右点
      const q3 = [10, 2 * a, 0]// 后点

      // 获取 角色能力 影响 前瞻能力 点
      // 学习 健康经验 点
      const q4 = this.getSprPoint(q1, q0, this.stdIndex.learn)
      const q5 = this.getSprPoint(q2, q0, this.stdIndex.experience)
      const q6 = this.getSprPoint(q3, q0, this.stdIndex.health)
      // 生成指标标度线数据
      const learnLine1 = this.get_LineM([q1, q4])
      const experienceLine1 = this.get_LineM([q2, q5])
      const healthLine1 = this.get_LineM([q3, q6])
      // 生成中点标记
      var text1Learn = this.create_Text(q1, q4, '学习:' + this.stdIndex.learn)
      var text1Experience = this.create_Text(q2, q5, '经验:' + this.stdIndex.experience)
      var text1Health = this.create_Text(q3, q6, '健康:' + this.stdIndex.health)
      // 生成包围面
      const lsp1 = this.get_Plane([q1, q4, q6, q3, q1], this.basiccol)
      const rsp1 = this.get_Plane([q2, q5, q6, q3, q2], this.basiccol)
      const fsp1 = this.get_Plane([q1, q4, q5, q2, q1], this.basiccol)
      const usp1 = this.get_Plane([q4, q5, q6, q4], this.basiccol)
      // 底面
      var dsp1 = this.get_Plane([q1, q2, q3, q1], this.basiccol)
      // // 创建三棱锥的6条棱
      const edge11 = this.get_Line(q0, q1)
      const edge21 = this.get_Line(q0, q2)
      const edge31 = this.get_Line(q1, q2)
      const edge41 = this.get_Line(q0, q3)
      const edge51 = this.get_Line(q1, q3)
      const edge61 = this.get_Line(q2, q3)
      // const learnLine1 = learnLine
      // const experienceLine1 = experienceLine
      // const healthLine1 = healthLine
      // const lsp2 = JSON.parse(JSON.stringify(lsp))
      // const rsp2 = JSON.parse(JSON.stringify(rsp))
      // const fsp2 = JSON.parse(JSON.stringify(fsp))
      // const usp2 = JSON.parse(JSON.stringify(usp))
      // const dsp2 = JSON.parse(JSON.stringify(dsp))
      // const textLearn1 = JSON.parse(JSON.stringify(textLearn))
      // const textExperience1 = JSON.parse(JSON.stringify(textExperience))
      // const textHealth1 = JSON.parse(JSON.stringify(textHealth))
      // const edge10 = JSON.parse(JSON.stringify(edge1))
      // const edge20 = JSON.parse(JSON.stringify(edge2))
      // const edge30 = JSON.parse(JSON.stringify(edge3))
      // const edge40 = JSON.parse(JSON.stringify(edge4))
      // const edge50 = JSON.parse(JSON.stringify(edge5))
      // const edge60 = JSON.parse(JSON.stringify(edge6))
      this.data1 = [learnLine1, experienceLine1, healthLine1, abilityLine, infuenceLine, pbLine,
        lspd, rspd, fspd, uspd, dsp, lsp1, rsp1, fsp1, usp1, dsp1,
        edg1, edg2, edge3, edg3, edge5, edge6,
        edge11, edge21, edge31, edge41, edge51, edge61,
        text1Learn, text1Experience, text1Health,
        textAbility, textInfuence, textPb
      ]
      Plotly.newPlot('plotlyChart2', this.data1, this.layout1)
      // Plotly.newPlot('plotlyChart',
      //   [
      //     //   {
      //     //   // Set up the initial water:
      //     //   x: frames[0].data[0].z,
      //     //   y: frames[0].data[0].x,
      //     //   z: frames[0].data[0].y,
      //     //   mode: 'scatter3d',
      //     //   fill: 'toself'
      //     // },
      //     // this.get_LineM(this.getCrossPointList(p1, p2, p3, p4, p5, p6, 1), "测试", "mesh3d", "toself", "green"),
      //     learnLine, experienceLine, healthLine, abilityLine, infuenceLine, pbLine,
      //     lsp, rsp, fsp, usp, lspd, rspd, fspd, uspd,
      //     edge1, edge2, edge3, edge4, edge5, edge6,
      //     edg1, edg2, edg3],
      //   layout).then(function () {
      //     Plotly.addFrames('plotlyChart', frames);
      //   })
      // )
      // // Add the frames so we can animate them:
      // Plotly.addFrames('plotlyChart', frames);
      // setTimeout(() =>
      //   Plotly.animate('plotlyChart', null, {
      //     transition: {
      //       duration: 500,
      //       easing: 'linear'
      //     },
      //     frame: {
      //       duration: 500,
      //       redraw: false,
      //     },
      //     mode: "immediate"
      //   }), 8000);
    },
    getV1 () {
      return Math.floor(Math.sqrt(2) / 12 * (125 - (5 - this.stdIndex.learn) * (5 - this.stdIndex.experience) * (5 - this.stdIndex.health)) * 100) / 100
    },
    getV2 () {
      return Math.floor(Math.sqrt(2) / 12 * (125 - (5 - this.stdIndex.ability) * (5 - this.stdIndex.influence) * (5 - this.stdIndex.pb)) * 100) / 100
    },
    getCrossPointList (p1, p2, p3, p4, p5, p6, z) {
      var line1 = [p1, p4]
      var line2 = [p2, p5]
      var line3 = [p3, p6]
      var longLine = []
      var midLine = []
      var shortLine = []
      if (p4[2] >= p5[2] && p4[2] >= p6[2]) {
        longLine = line1
        if (p5[2] >= p6[2]) {
          midLine = line2
          shortLine = line3
        } else {
          midLine = line3
          shortLine = line2
        }
      } else if (p5[2] >= p4[2] && p5[2] >= p6[2]) {
        longLine = line2
        if (p4[2] >= p6[2]) {
          midLine = line1
          shortLine = line3
        } else {
          midLine = line3
          shortLine = line1
        }
      } else if (p6[2] >= p5[2] && p6[2] >= p4[2]) {
        longLine = line3
        if (p4[2] >= p5[2]) {
          midLine = line1
          shortLine = line2
        } else {
          midLine = line2
          shortLine = line1
        }
      }
      if (z <= shortLine[1][2]) {
        console.log('是低了')
        return [this.getPointByZLine(shortLine[0], shortLine[1], z),
          this.getPointByZLine(midLine[0], midLine[1], z),
          this.getPointByZLine(longLine[0], longLine[1], z),
          this.getPointByZLine(shortLine[0], shortLine[1], z)
        ]
      } else if (z < midLine[1][2]) {
        return [this.getPointByZLine(shortLine[1], midLine[1], z),
          this.getPointByZLine(midLine[0], midLine[1], z),
          this.getPointByZLine(longLine[0], longLine[1], z),
          this.getPointByZLine(shortLine[1], longLine[1], z),
          this.getPointByZLine(shortLine[1], midLine[1], z)
        ]
      } else if (z === midLine[1][2]) {
        return [midLine[1],
          this.getPointByZLine(longLine[0], longLine[1], z),
          this.getPointByZLine(shortLine[1], longLine[1], z),
          midLine[1]
        ]
      } else if (z < longLine[1][2]) {
        return [this.getPointByZLine(shortLine[1], longLine[1], z),
          this.getPointByZLine(midLine[1], longLine[1], z),
          this.getPointByZLine(longLine[0], longLine[1], z),
          this.getPointByZLine(shortLine[1], longLine[1], z)
        ]
      } else {
        console.log('无交点')
        return []
      }
    },
    getVector (startpoint, endpoint) {
      return [endpoint[0] - startpoint[0], endpoint[1] - startpoint[1], endpoint[2] - startpoint[2]]
    },
    getLineLength (startpoint, endpoint) {
      return Math.sqrt(
        Math.pow(startpoint[0] - endpoint[0], 2) +
        Math.pow(startpoint[1] - endpoint[1], 2) +
        Math.pow(startpoint[2] - endpoint[2], 2)
      )
    },
    getPointByZLine (startpoint, endpoint, z) {
      var perc = (z - startpoint[2]) / (endpoint[2] - startpoint[2])
      return [startpoint[0] + perc * this.getVector(startpoint, endpoint)[0],
        startpoint[1] + perc * this.getVector(startpoint, endpoint)[1], z
      ]
    },
    getSprPoint (startpoint, endpoint, length) {
      let lineLength = Math.sqrt(
        Math.pow(startpoint[0] - endpoint[0], 2) +
        Math.pow(startpoint[1] - endpoint[1], 2) +
        Math.pow(startpoint[2] - endpoint[2], 2)
      )
      let percent = length / lineLength

      let vec = [endpoint[0] - startpoint[0], endpoint[1] - startpoint[1], endpoint[2] - startpoint[2]]
      let sprPoint = [startpoint[0] + percent * vec[0],
        startpoint[1] + percent * vec[1],
        startpoint[2] + percent * vec[2]]
      return sprPoint
    },
    get_Line (begin, end) {
      return {
        x: [begin[0], end[0]],
        y: [begin[1], end[1]],
        z: [begin[2], end[2]],
        mode: 'lines',
        type: 'scatter3d',
        line: { color: 'black' }
      }
    },
    get_LineM (pointList, type = 'scatter3d', fill = '', color = 'red') {
      const xList = []
      const yList = []
      const zList = []
      let i = 0
      for (i = 0; i < pointList.length; i++) {
        xList.push(pointList[i][0])
        yList.push(pointList[i][1])
        zList.push(pointList[i][2])
      }
      return {
        x: xList,
        y: yList,
        z: zList,
        type: type,
        mode: 'lines+text+markers',
        textposition: 'middle center',
        line: { color: color },
        fill: fill
      }
    },
    create_Text (startpoint, endpoint, text) {
      return {
        x: [(startpoint[0] + endpoint[0]) / 2],
        y: [(startpoint[1] + endpoint[1]) / 2],
        z: [(startpoint[2] + endpoint[2]) / 2],
        mode: 'text',
        text: text,
        textposition: 'center middle',
        type: 'scatter3d'
      }
    },
    get_Plane (pointList, color) {
      const xList = []
      const yList = []
      const zList = []
      let i = 0
      for (i = 0; i < pointList.length; i++) {
        xList.push(pointList[i][0])
        yList.push(pointList[i][1])
        zList.push(pointList[i][2])
      }
      return {
        x: xList,
        y: yList,
        z: zList,
        type: 'mesh3d',
        color: color,
        showlegend: 'true',
        opacity: 1
      }
    },
    pluginDownload () {
      window.location.href = '/DDD.VUE'
    },
    changeShowData () {
      if (this.showType === true) {
        this.showType = false
      } else if (this.showType === false) {
        this.showType = true
      }
      if (this.showType === true) {
        Plotly.react('plotlyChart1', this.data, this.layout)
        // this.rotateChart()
      } else if (this.showType === false) {
        Plotly.react('plotlyChart2', this.data1, this.layout1)
      }
    },
    autoRotate () {
      this.ifRotate = true
      if (this.animateFrame) {
        cancelAnimationFrame(this.animateFrame)
        this.animateFrame = null // 清空变量
      }
      this.rotateChart()
    },
    stopRotate () {
      this.ifRotate = false
      if (this.animateFrame) {
        cancelAnimationFrame(this.animateFrame)
        this.animateFrame = null // 清空变量
      }
      this.rotateChart()
    },
    rotateChart () {
      if (!this.ifRotate) {
        return
      }
      // 改变eye
      this.currentAngle += this.rotationSpeed / 600 // 根据FPS（每秒帧数）计算增加的角度
      // 上下锥
      let camera = {
        // 绕 z 轴旋转
        eye: { x: 3 * Math.cos(this.currentAngle), y: 3 * Math.sin(this.currentAngle), z: 1 }
      }
      if (this.showType === true) {
        Plotly.relayout('plotlyChart1', {
          'scene.camera': camera
        })
      } else if (this.showType === false) {
        Plotly.relayout('plotlyChart2', {
          'scene.camera': camera
        })
      }

      // 循环调用更新
      this.animateFrame = requestAnimationFrame(this.rotateChart)
    },
    changeSpeed (val) {
      switch (val) {
        case -2: this.rotationSpeed -= 5
          if (this.rotationSpeed < 1) {
            this.rotationSpeed = 1
          }
          break
        case -1: this.rotationSpeed -= 1
          if (this.rotationSpeed < 1) {
            this.rotationSpeed = 1
          }
          break
        case 1: this.rotationSpeed += 1
          if (this.rotationSpeed > 40) {
            this.rotationSpeed = 40
          }
          break
        case 2: this.rotationSpeed += 5
          if (this.rotationSpeed > 40) {
            this.rotationSpeed = 40
          }
          break
        default:
          break
      }
    },
    getText (val) {
      var a1 = ''
      var v1 = Math.floor(Math.sqrt(2) / 12 * (125 - (5 - this.stdIndex.learn) * (5 - this.stdIndex.experience) * (5 - this.stdIndex.health)) * 100) / 100
      var v2 = Math.floor(Math.sqrt(2) / 12 * (125 - (5 - this.stdIndex.ability) * (5 - this.stdIndex.influence) * (5 - this.stdIndex.pb)) * 100) / 100
      if (v1 === 0) return '请认真作答。'
      var exceed = (v2 - v1) / v1
      if (exceed >= 0.33) {
        a1 += '您的核心素质水平明显超出您的基础素质水平。'
      } else if (exceed <= -0.33) {
        a1 += '您的核心素质水平明显低于您的基础素质水平。'
      } else {
        a1 += '您的核心素质水平与您的基础素质水平相对持平。'
      }
      var basicMin = ''
      var basicMax = ''
      var bmax = Math.max(this.stdIndex.learn, this.stdIndex.experience, this.stdIndex.health)
      if (bmax === this.stdIndex.learn) {
        basicMax = '学习'
      } else if (bmax === this.stdIndex.experience) {
        basicMax = '经验'
      } else {
        basicMax = '心理健康'
      }
      var bmin = Math.min(this.stdIndex.learn, this.stdIndex.experience, this.stdIndex.health)
      if (bmin === this.stdIndex.learn) {
        basicMin = '学习'
      } else if (bmin === this.stdIndex.experience) {
        basicMin = '经验'
      } else {
        basicMin = '心理健康'
      }
      var a2 = ''
      a2 += '在您的基础素质指标中，您的' + basicMax + '维度表现突出。您的' + basicMin + '维度尚有欠缺，需要提升。'
      var coreMin = ''
      var coreMax = ''
      var a3 = ''
      var cmax = Math.max(this.stdIndex.pb, this.stdIndex.influence, this.stdIndex.ability)
      if (cmax === this.stdIndex.pb) {
        coreMax = '前瞻能力'
      } else if (cmax === this.stdIndex.influence) {
        coreMax = '影响力'
      } else {
        coreMax = '角色能力'
      }
      var cmin = Math.min(this.stdIndex.pb, this.stdIndex.influence, this.stdIndex.ability)
      if (cmin === this.stdIndex.pb) {
        coreMin = '前瞻能力'
      } else if (cmin === this.stdIndex.influence) {
        coreMin = '影响力'
      } else {
        coreMin = '角色能力'
      }
      a3 += '在您的核心素质指标中，您的' + coreMax + '维度表现突出。您的' + coreMin + '维度尚有欠缺，需要提升。'
      switch (val) {
        case 1:return a1
        case 2:return a2
        case 3:return a3
        default:return '没有获取到您的指标。'
      }
    }
  }
}
